package methodref02;

import org.junit.Test;

import java.util.function.BiPredicate;
import java.util.function.Function;

/**
 * 特殊的非静态方法的引用
 *  格式:
 *    类名::非静态方法名
 *    1.不再适用于方法引用的前提条件
 *    2.当Lambda表达式的第一个参数,作为实例(非静态)方法的调用者,第二个参数作为实例方法的参数,可以使用类名::非静态方法名
 *    3.当Lambda表达式的参数作为一个空参实例方法的调用者时候,也可以使用类名::非静态方法名
 */
public class MethodRefDemo05 {
    @Test
    public void test01(){
        Person p1 = new Person("老王");
        Person p2 = new Person("老李");

        //BiPredicate<Person,Person> bp = (person1, person2) ->person1.equals(person2) ;

        // 改造后
        BiPredicate<Person,Person> bp = Person::equals;
        boolean test = bp.test(p1, p2);
        System.out.println(test); //  false
    }

    @Test
    public void test02(){
        Person p1 = new Person("老王");
        //Function<Person, String> f = person -> person.getName();
        Function<Person, String> f = Person::getName;
        System.out.println(f.apply(p1));
    }
}
